package createModel.factory.abstractFactory;

/**
 * 工厂模式：
 * （1）：隐藏了内部细节，
 * 绝大多数原因就是对上层的使用者隔离对象创建的过程；或者是对象创建的过程复杂，
 * 使用者不容易掌握；或者是对象创建要满足某种条件，这些条件是业务的需求也好，
 * 是系统约束也好，没有必要让上层使用者掌握，增加别人开发的难度。
 * （2）
 * 节省内存开支：类型dbSessionFactory 获取连接，log日志实例，通用工厂
 *
 * 抽象工厂模式（Abstract Factory）
 工厂方法模式有一个问题就是，类的创建依赖工厂类，也就是说，如果想要拓展程序，
 必须对工厂类进行修改，这违背了闭包原则，所以，从设计角度考虑，有一定的问题，
 如何解决？就用到抽象工厂模式，创建多个工厂类，这样一旦需要增加新的功能，
 直接增加新的工厂类就可以了，不需要修改之前的代码。
 */


/**
 * 其实这个模式的好处就是，如果你现在想增加一个功能：发及时信息，
 * 则只需做一个实现类，实现Sender接口，同时做一个工厂类，实现Provider接口，
 * 就OK了，无需去改动现成的代码。这样做，拓展性较好！
 */
public class Test {
    public static void main(String[] args) {
        Provider provider = new SendMailFactory();
        Sender sender = provider.produce();
        sender.Send();
    }
}
